package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/longest-palindrome/'>最长回文串(Longest Palindrome)</a>
 * <p>给定一个包含大写字母和小写字母的字符串 s ，返回 通过这些字母构造成的 最长的回文串 。</p>
 * <p>在构造过程中，请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1:
 *      输入:s = "abccccdd"
 *      输出:7
 *      解释:
 *          我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
 *
 * 示例 2:
 *      输入:s = "a"
 *      输出:1
 *
 * 示例 3：
 *      输入:s = "aaaaaccc"
 *      输出:7
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= s.length <= 2000</li>
 *         <li>s 只由小写 和/或 大写英文字母组成</li>
 *     </ul>
 * </p>
 *
 * @author c2b
 * @since 2023/12/18 10:35
 */
public class LC0409LongestPalindrome_S {

    static class Solution {
        public int longestPalindrome(String s) {
            int[] cntArr = new int[58];
            for (char ch : s.toCharArray()) {
                cntArr[ch - 'A']++;
            }
            int ans = 0;
            boolean flag = false;
            for (int cnt : cntArr) {
                if (cnt != 0) {
                    ans += cnt;
                    if (cnt % 2 != 0) {
                        ans -= 1;
                        flag = true;
                    }
                }
            }
            if (flag) {
                ans += 1;
            }
            return ans;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.longestPalindrome("abccccdd"));
        System.out.println(solution.longestPalindrome("a"));
        System.out.println(solution.longestPalindrome("aaaaaccc"));
    }
}
